package com.webank.oracle.transaction.vrf;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Callable;

import org.fisco.bcos.channel.client.TransactionSucCallback;
import org.fisco.bcos.channel.event.filter.EventLogPushWithDecodeCallback;
import org.fisco.bcos.web3j.abi.EventEncoder;
import org.fisco.bcos.web3j.abi.FunctionEncoder;
import org.fisco.bcos.web3j.abi.FunctionReturnDecoder;
import org.fisco.bcos.web3j.abi.TypeReference;
import org.fisco.bcos.web3j.abi.datatypes.Address;
import org.fisco.bcos.web3j.abi.datatypes.Bool;
import org.fisco.bcos.web3j.abi.datatypes.DynamicBytes;
import org.fisco.bcos.web3j.abi.datatypes.Event;
import org.fisco.bcos.web3j.abi.datatypes.Function;
import org.fisco.bcos.web3j.abi.datatypes.Type;
import org.fisco.bcos.web3j.abi.datatypes.generated.Bytes32;
import org.fisco.bcos.web3j.abi.datatypes.generated.Int256;
import org.fisco.bcos.web3j.abi.datatypes.generated.StaticArray2;
import org.fisco.bcos.web3j.abi.datatypes.generated.Uint256;
import org.fisco.bcos.web3j.crypto.Credentials;
import org.fisco.bcos.web3j.crypto.EncryptType;
import org.fisco.bcos.web3j.protocol.Web3j;
import org.fisco.bcos.web3j.protocol.core.RemoteCall;
import org.fisco.bcos.web3j.protocol.core.methods.response.Log;
import org.fisco.bcos.web3j.protocol.core.methods.response.TransactionReceipt;
import org.fisco.bcos.web3j.tuples.generated.Tuple1;
import org.fisco.bcos.web3j.tuples.generated.Tuple2;
import org.fisco.bcos.web3j.tuples.generated.Tuple3;
import org.fisco.bcos.web3j.tuples.generated.Tuple4;
import org.fisco.bcos.web3j.tx.Contract;
import org.fisco.bcos.web3j.tx.TransactionManager;
import org.fisco.bcos.web3j.tx.gas.ContractGasProvider;
import org.fisco.bcos.web3j.tx.txdecode.TransactionDecoder;

/**
 * <p>Auto generated code.
 * <p><strong>Do not modify!</strong>
 * <p>Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>,
 * or the org.fisco.bcos.web3j.codegen.SolidityFunctionWrapperGenerator in the 
 * <a href="https://github.com/web3j/web3j/tree/master/codegen">codegen module</a> to update.
 *
 * <p>Generated with web3j version none.
 */
@SuppressWarnings("unchecked")
public class VRFCore extends Contract {
    public static final String[] BINARY_ARRAY = {"608060405234801561001057600080fd5b50604051612ab5380380612ab58339818101604052604081101561003357600080fd5b810190808051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38160038190555080600481905550505061298c806101296000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638f32d59b116100665780638f32d59b146102235780639ade50c414610245578063ac917f8414610355578063caf70c4a146103c5578063f2fde38b1461043e57610093565b806321f36509146100985780634c0999c71461010d57806389f08112146101b45780638da5cb5b146101d9575b600080fd5b6100c4600480360360208110156100ae57600080fd5b8101908080359060200190929190505050610482565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6101396004803603602081101561012357600080fd5b81019080803590602001909291905050506104c6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561017957808201518184015260208101905061015e565b50505050905090810190601f1680156101a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101bc610585565b604051808381526020018281526020019250505060405180910390f35b6101e1610596565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61022b6105bf565b604051808215151515815260200191505060405180910390f35b610353600480360360a081101561025b57600080fd5b8101908080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290803590602001906401000000008111156102b957600080fd5b8201836020820111156102cb57600080fd5b803590602001918460018302840111640100000000831117156102ed57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190505050610616565b005b6103ab6004803603606081101561036b57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061074c565b604051808215151515815260200191505060405180910390f35b610428600480360360408110156103db57600080fd5b8101908080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290505050610a73565b6040518082815260200191505060405180910390f35b6104806004803603602081101561045457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610acb565b005b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b606080602067ffffffffffffffff811180156104e157600080fd5b506040519080825280601f01601f1916602001820160405280156105145781602001600182028036833780820191505090505b50905060005b602081101561057b5783816020811061052f57fe5b1a60f81b82828151811061053f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061051a565b5080915050919050565b600080600354600454915091509091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6000610620612896565b60008061062f88888888610b51565b935093509350935060016000838152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090555050600061068d83838660000151610e59565b905080610702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f63616c6c206261636b206661696c65642100000000000000000000000000000081525060200191505060405180910390fd5b7fa2e7a402243ebda4a69ceeb3dfb682943b7a9b3ac66d6eefa8db65894009611c8383604051808381526020018281526020019250505060405180910390a1505050505050505050565b6000806002600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006107b086868685610fb7565b905060006107c46003546004548985611031565b9050600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461083257fe5b846001600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550814360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060016000838152602001908152602001600020600101819055507fc06fcf6ce6367ae604bd05fb6b104a7d6dad2212994be259d5fd64a54a6ea49430888443898660016000898152602001908152602001600020600101548d604051808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019850505050505050505060405180910390a1610a116001600260008a815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461107c90919063ffffffff16565b6002600089815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050509392505050565b6000816040516020018082600260200280838360005b83811015610aa4578082015181840152602081019050610a89565b50505050905001915050604051602081830303815290604052805190602001209050919050565b610ad36105bf565b610b45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610b4e81611104565b50565b6000610b5b612896565b600080610b6788610a73565b9350610b796003546004548689611031565b9150600160008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250509250600073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff161415610ca2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e6f20636f72726573706f6e64696e672072657175657374000000000000000081525060200191505060405180910390fd5b8585604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120836020015114610d49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f77726f6e672070726553656564206f7220626c6f636b206e756d00000000000081525060200191505060405180910390fd5b600085409050600087826040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050610d8a6128c9565b610d938a611248565b9050610da88b82610da3856104c6565b611336565b610e1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f70726f6f6620636865636b206661696c6564210000000000000000000000000081525060200191505060405180910390fd5b610e4681600060048110610e2a57fe5b602002015182600160048110610e3c57fe5b60200201516114aa565b60001c9350505050945094509450949050565b60008060405180806129346023913960230190506040518091039020905060608186866040516024018083815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffff","ffffffffffffffffffffffffffffff8381831617835250505050905060008473ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b60208310610f3f5780518252602082019150602081019050602083039250610f1c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610fa1576040519150601f19603f3d011682016040523d82523d6000602084013e610fa6565b606091505b505090508093505050509392505050565b600084848484604051602001808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019450505050506040516020818303038152906040528051906020012060001c9050949350505050565b60008484848460405160200180858152602001848152602001838152602001828152602001945050505050604051602081830303815290604052805190602001209050949350505050565b6000808284019050838110156110fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561118a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806128ec6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112506128c9565b60518251146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4d616c666f726d6564205652462070726f6f660000000000000000000000000081525060200191505060405180910390fd5b6000806000806001860151935060218601519250603186015191506051860151905060006112f585856115ef565b90506040518060800160405280858152602001828152602001846fffffffffffffffffffffffffffffffff1681526020018381525095505050505050919050565b60008060006113458685611628565b915091506000806113de8760036004811061135c57fe5b60200201517f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817987f483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b88a6002600481106113b057fe5b60200201518c6000600281106113c257fe5b60200201518d6001600281106113d457fe5b602002015161194d565b91509150600080611437896003600481106113f557fe5b602002015187878c60026004811061140957fe5b60200201518d60006004811061141b57fe5b60200201518e60016004811061142d57fe5b602002015161194d565b91509150600061146f87878c60006004811061144f57fe5b60200201518d60016004811061146157fe5b6020020151898989896119c1565b90508960026004811061147e57fe5b60200201518160801c6fffffffffffffffffffffffffffffffff16149750505050505050509392505050565b6000606060fe60036114bc8686611c3a565b604051602001808460ff1660ff1660f81b81526001018360ff1660ff1660f81b815260010182805190602001908083835b6020831061151057805182526020820191506020810190506020830392506114ed565b6001836020036101000a038019825116818451168082178552505050505050905001935050505060405160208183030381529060405290506002816040518082805190602001908083835b6020831061157e578051825260208201915060208101905060208303925061155b565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156115c0573d6000803e3d6000fd5b5050506040513d60208110156115d557600080fd5b810190808051906020019092919050505091505092915050565b60006116208383600060077ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f611c88565b905092915050565b600080606060fe600161165d8760006002811061164157fe5b60200201518860016002811061165357fe5b6020020151611c3a565b86604051602001808560ff1660ff1660f81b81526001018460ff1660ff1660f81b815260010183805190602001908083835b602083106116b2578051825260208201915060208101905060208303925061168f565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831061170357805182526020820191506020810190506020830392506116e0565b6001836020036101000a038019825116818451168082178552505050505050905001945050505050604051602081830303815290604052905060008090505b6101008160ff1610156118d7576000600283836040516020018083805190602001908083835b6020831061178b5780518252602082019150602081019050602083039250611768565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660ff1660f81b8152600101925050506040516020818303038152906040526040518082805190602001908083835b6020831061180257805182526020820191506020810190506020830392506117df565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015611844573d6000803e3d6000fd5b5050506040513d602081101561185957600080fd5b8101908080519060200190929190505050905060008160001c905060006118816002836115ef565b90506118b28282600060077ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f611d77565b156118c7578181965096505050505050611946565b5050508080600101915050611742565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f2076616c696420706f696e742077617320666f756e64000000000000000081525060200191505060405180910390fd5b9250929050565b60008060008061195e8a8a8a611e1b565b91509150600080611970898989611e1b565b915091506000806119a68686868660007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f611e58565b91509150818197509750505050505050965096945050505050565b6000606060fe60026119d38c8c611c3a565b6119dd8b8b611c3a565b6119e78a8a611c3a565b6119f18989611c3a565b604051602001808760ff1660ff1660f81b81526001018660ff1660ff1660f81b815260010185805190602001908083835b60208310611a455780518252602082019150602081019050602083039250611a22565b6001836020036101000a03801982511681845116808217855250505050505090500184805190602001908083835b60208310611a965780518252602082019150602081019050602083039250611a73565b6001836020036101000a03801982511681845116808217855250505050505090500183805190602001908083835b60208310611ae75780518252602082019150602081019050602083039250611ac4565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310611b385780518252602082019150602081019050602083039250611b15565b6001836020036101000a0380198251168184511680821785525050505050509050019650505050505050604051602081830303815290604052905060006002826040518082805190602001908083835b60208310611bab5780518252602082019150602081019050602083039250611b88565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015611bed573d6000803e3d6000fd5b5050506040513d6020811015611c0257600080fd5b810190808051906020019092919050505090506000604051826000820152600081015191505080935050505098975050505050505050565b6060600060028381611c4857fe5b0660020190508084604051602001808360ff1660ff1660f81b81526001018281526020019250505060405160208183030381529060405291505092915050565b600060028660ff161480611c9f575060038660ff16145b611cf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806129126022913960400191505060405180910390fd5b60008280611cfe57fe5b8380611d0657fe5b858580611d0f57fe5b888a09088480611d1b57fe5b8580611d2357fe5b898a098909089050611d438160046001860181611d3c57fe5b0485611e8c565b905060008060028960ff16840181611d5757fe5b0614611d6557818403611d67565b815b9050809250505095945050505050565b60008560001480611d885750818610155b80611d935750846000145b80611d9e5750818510155b15611dac5760009050611e12565b60008280611db657fe5b868709905060008380611dc557fe5b888580611dce57fe5b8a8b0909905060008614611df4578380611de457fe5b8480611dec57fe5b878a09820890505b60008514611e0a578380611e0457fe5b85820890505b808214925050505b95945050505050565b600080611e4c85858560007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f611fba565b91509150935093915050565b600080600080611e69888887611ff4565b91509150611e7b8a8a84848a8a612010565b935093505050965096945050505050565b600080821415611f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4d6f6475","6c7573206973207a65726f000000000000000000000000000000000081525060200191505060405180910390fd5b6000841415611f165760009050611fb3565b6000831415611f285760019050611fb3565b60006001905060007f800000000000000000000000000000000000000000000000000000000000000090505b6000811115611fad57838186161515870a85848509099150836002820486161515870a85848509099150836004820486161515870a85848509099150836008820486161515870a85848509099150601081049050611f54565b81925050505b9392505050565b6000806000806000611fd18a8a8a60018b8b6120ae565b925092509250611fe383838389612153565b945094505050509550959350505050565b60008084838585038161200357fe5b0691509150935093915050565b600080600080905060008090506000809050888b1415612071576000868061203457fe5b898c08141561205257600080819150809050945094505050506120a3565b6120608b8b60018a8a6121ae565b80935081945082955050505061208f565b6120828b8b60018c8c60018c6122cd565b8093508194508295505050505b61209b83838389612153565b945094505050505b965096945050505050565b6000806000808914156120c957878787925092509250612147565b6000899050600080905060008090506000600190505b60008414612139576000600185161461210e576121018383838f8f8f8e6122cd565b8093508194508295505050505b6002848161211857fe5b0493506121288c8c8c8c8c6121ae565b809c50819d50829e505050506120df565b828282965096509650505050505b96509650969350505050565b6000806000612162858561279e565b90506000848061216e57fe5b82830990506000858061217d57fe5b828a0990506000868061218c57fe5b878061219457fe5b8486098a0990508181955095505050505094509492505050565b6000806000808614156121c9578787879250925092506122c2565b600084806121d357fe5b898a099050600085806121e257fe5b898a099050600086806121f157fe5b898a0990506000878061220057fe5b888061220857fe5b848e0960040990506000888061221a57fe5b898061222257fe5b8a8061222a57fe5b8586098c098a8061223757fe5b87600309089050888061224657fe5b898061224e57fe5b8384088a038a8061225b57fe5b838409089450888061226957fe5b898061227157fe5b8a8061227957fe5b8687096008098a038a8061228957fe5b8b8061229157fe5b888d038608840908935088806122a357fe5b89806122ab57fe5b8c8e09600209925084848497509750975050505050505b955095509592505050565b6000806000808a1480156122e15750600089145b156122f457868686925092509250612791565b6000871480156123045750600086145b1561231757898989925092509250612791565b61231f6128c9565b848061232757fe5b898a098160006004811061233757fe5b602002018181525050848061234857fe5b8160006004811061235557fe5b60200201518a098160016004811061236957fe5b602002018181525050848061237a57fe5b8687098160026004811061238a57fe5b602002018181525050848061239b57fe5b816002600481106123a857fe5b60200201518709816003600481106123bc57fe5b602002018181525050604051806080016040528086806123d857fe5b836002600481106123e557fe5b60200201518e09815260200186806123f957fe5b8360036004811061240657fe5b60200201518d098152602001868061241a57fe5b8360006004811061242757fe5b60200201518b098152602001868061243b57fe5b8360016004811061244857fe5b60200201518a0981525090508060026004811061246157fe5b60200201518160006004811061247357fe5b60200201511415806124a757508060036004811061248d57fe5b60200201518160016004811061249f57fe5b602002015114155b612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f557365206a6163446f75626c652066756e6374696f6e20696e7374656164000081525060200191505060405180910390fd5b6125216128c9565b858061252957fe5b8260006004811061253657fe5b602002015187038360026004811061254a57fe5b6020020151088160006004811061255d57fe5b602002018181525050858061256e57fe5b8260016004811061257b57fe5b602002015187038360036004811061258f57fe5b602002015108816001600481106125a257fe5b60200201818152505085806125b357fe5b816000600481106125c057fe5b6020020151826000600481106125d257fe5b602002015109816002600481106125e557fe5b60200201818152505085806125f657fe5b8160006004811061260357fe5b60200201518260026004811061261557fe5b6020020151098160036004811061262857fe5b6020020181815250506000868061263b57fe5b8260036004811061264857fe5b60200201518803888061265757fe5b8460016004811061266457fe5b60200201518560016004811061267657fe5b602002015109089050868061268757fe5b878061268f57fe5b888061269757fe5b846002600481106126a457fe5b6020020151866000600481106126b657fe5b602002015109600209880382089050600087806126cf57fe5b88806126d757fe5b838a038a806126e257fe5b866002600481106126ef57fe5b60200201518860006004811061270157fe5b602002015109088460016004811061271557fe5b6020020151099050878061272557fe5b888061272d57fe5b8460036004811061273a57fe5b60200201518660016004811061274c57fe5b6020020151098903820890506000888061276257fe5b898061276a57fe5b8b8f098560006004811061277a57fe5b602002015109905082828297509750975050505050505b9750975097945050505050565b60008083141580156127b05750818314155b80156127bd575060008214155b61282f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c6964206e756d62657200000000000000000000000000000000000081525060200191505060405180910390fd5b6000809050600060019050600084905060005b600087146128895786828161285357fe5b04905082868061285f57fe5b878061286757fe5b8584098803860880945081955050508687820283038098508193505050612842565b8394505050505092915050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600080191681525090565b604051806080016040528060049060208202803683378082019150509050509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e76616c696420636f6d7072657373656420454320706f696e742070726566697863616c6c6261636b52616e646f6d6e65737328627974657333322c75696e7432353629a2646970667358221220a954b8328b2b19dd583e274024fa8f0c43a12f8832bec9760966ca4165a0354664736f6c634300060a0033"};

    public static final String BINARY = String.join("", BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_chainId\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"_groupId\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"coreAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"keyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"seed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"requestId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"seedAndBlockNum\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"consumerSeed\",\"type\":\"uint256\"}],\"name\":\"RandomnessRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"requestId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"output\",\"type\":\"uint256\"}],\"name\":\"RandomnessRequestFulfilled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_bytes32\",\"type\":\"bytes32\"}],\"name\":\"bytes32ToBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"callbackContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"seedAndBlockNum\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[2]\",\"name\":\"_publicKey\",\"type\":\"uint256[2]\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"preSeed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"fulfillRandomnessRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainIdAndGroupId\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[2]\",\"name\":\"_publicKey\",\"type\":\"uint256[2]\"}],\"name\":\"hashOfKey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_keyHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_consumerSeed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"randomnessRequest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"};

    public static final String ABI = String.join("", ABI_ARRAY);

    public static final TransactionDecoder transactionDecoder = new TransactionDecoder(ABI, BINARY);

    public static final String[] SM_BINARY_ARRAY = {"608060405234801561001057600080fd5b50604051612ab5380380612ab58339818101604052604081101561003357600080fd5b810190808051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d060405160405180910390a38160038190555080600481905550505061298c806101296000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80633a73167f116100665780633a73167f146102185780635089e2c81461028d578063580bd29a146102d7578063bca5ea25146103e7578063ede8e5291461046057610093565b80631290c07c14610098578063148b8666146101085780631667e434146101af57806316cad12a146101d4575b600080fd5b6100ee600480360360608110156100ae57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610482565b604051808215151515815260200191505060405180910390f35b6101346004803603602081101561011e57600080fd5b81019080803590602001909291905050506107a9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610174578082015181840152602081019050610159565b50505050905090810190601f1680156101a15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b7610868565b604051808381526020018281526020019250505060405180910390f35b610216600480360360208110156101ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610879565b005b6102446004803603602081101561022e57600080fd5b81019080803590602001909291905050506108ff565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b610295610943565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e5600480360360a08110156102ed57600080fd5b8101908080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f82011690508083019250505050505091929192908035906020019064010000000081111561034b57600080fd5b82018360208201111561035d57600080fd5b8035906020019184600183028401116401000000008311171561037f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019092919050505061096c565b005b61044a600480360360408110156103fd57600080fd5b8101908080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290505050610aa2565b6040518082815260200191505060405180910390f35b610468610afa565b604051808215151515815260200191505060405180910390f35b6000806002600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006104e686868685610b51565b905060006104fa6003546004548985610bcb565b9050600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461056857fe5b846001600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550814360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060016000838152602001908152602001600020600101819055507f777077e86213c46dd319a4854a5c6b749a0dd12044827213e975efa3de19b47f30888443898660016000898152602001908152602001600020600101548d604051808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019850505050505050505060405180910390a16107476001600260008a815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c1690919063ffffffff16565b6002600089815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050509392505050565b606080602067ffffffffffffffff811180156107c457600080fd5b506040519080825280601f01601f1916602001820160405280156107f75781602001600182028036833780820191505090505b50905060005b602081101561085e5783816020811061081257fe5b1a60f81b82828151811061082257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506107fd565b5080915050919050565b600080600354600454915091509091565b610881610afa565b6108f3576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6108fc81610c9e565b50565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610976612896565b60008061098588888888610de2565b935093509350935060016000838152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055505060006109e3838386600001516110ea565b905080610a58576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f63616c6c206261636b206661696c65642100000000000000000000000000000081525060200191505060405180910390fd5b7fddbc44155b0a0c66d2c0f2912cffaf4f6392cf074058f06945ccbd2333e0e6e78383604051808381526020018281526020019250505060405180910390a1505050505050505050565b6000816040516020018082600260200280838360005b83811015610ad3578082015181840152602081019050610ab8565b50505050905001915050604051602081830303815290604052805190602001209050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600084848484604051602001808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019450505050506040516020818303038152906040528051906020012060001c9050949350505050565b60008484848460405160200180858152602001848152602001838152602001828152602001945050505050604051602081830303815290604052805190602001209050949350505050565b600080828401905083811015610c94576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d24576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061290e6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610dec612896565b600080610df888610aa2565b9350610e0a6003546004548689610bcb565b9150600160008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250509250600073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff161415610f33576040517fc703cb12000000000000000000","0000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e6f20636f72726573706f6e64696e672072657175657374000000000000000081525060200191505060405180910390fd5b8585604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120836020015114610fda576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f77726f6e672070726553656564206f7220626c6f636b206e756d00000000000081525060200191505060405180910390fd5b60008540905060008782604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905061101b6128c9565b6110248a611248565b90506110398b82611034856107a9565b611336565b6110ab576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f70726f6f6620636865636b206661696c6564210000000000000000000000000081525060200191505060405180910390fd5b6110d7816000600481106110bb57fe5b6020020151826001600481106110cd57fe5b60200201516114aa565b60001c9350505050945094509450949050565b60008060405180806129346023913960230190506040518091039020905060608186866040516024018083815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008473ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b602083106111d057805182526020820191506020810190506020830392506111ad565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611232576040519150601f19603f3d011682016040523d82523d6000602084013e611237565b606091505b505090508093505050509392505050565b6112506128c9565b60518251146112c7576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4d616c666f726d6564205652462070726f6f660000000000000000000000000081525060200191505060405180910390fd5b6000806000806001860151935060218601519250603186015191506051860151905060006112f585856115ef565b90506040518060800160405280858152602001828152602001846fffffffffffffffffffffffffffffffff1681526020018381525095505050505050919050565b60008060006113458685611628565b915091506000806113de8760036004811061135c57fe5b60200201517f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817987f483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b88a6002600481106113b057fe5b60200201518c6000600281106113c257fe5b60200201518d6001600281106113d457fe5b602002015161194d565b91509150600080611437896003600481106113f557fe5b602002015187878c60026004811061140957fe5b60200201518d60006004811061141b57fe5b60200201518e60016004811061142d57fe5b602002015161194d565b91509150600061146f87878c60006004811061144f57fe5b60200201518d60016004811061146157fe5b6020020151898989896119c1565b90508960026004811061147e57fe5b60200201518160801c6fffffffffffffffffffffffffffffffff16149750505050505050509392505050565b6000606060fe60036114bc8686611c3a565b604051602001808460ff1660ff1660f81b81526001018360ff1660ff1660f81b815260010182805190602001908083835b6020831061151057805182526020820191506020810190506020830392506114ed565b6001836020036101000a038019825116818451168082178552505050505050905001935050505060405160208183030381529060405290506002816040518082805190602001908083835b6020831061157e578051825260208201915060208101905060208303925061155b565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156115c0573d6000803e3d6000fd5b5050506040513d60208110156115d557600080fd5b810190808051906020019092919050505091505092915050565b60006116208383600060077ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f611c88565b905092915050565b600080606060fe600161165d8760006002811061164157fe5b60200201518860016002811061165357fe5b6020020151611c3a565b86604051602001808560ff1660ff1660f81b81526001018460ff1660ff1660f81b815260010183805190602001908083835b602083106116b2578051825260208201915060208101905060208303925061168f565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831061170357805182526020820191506020810190506020830392506116e0565b6001836020036101000a038019825116818451168082178552505050505050905001945050505050604051602081830303815290604052905060008090505b6101008160ff1610156118d7576000600283836040516020018083805190602001908083835b6020831061178b5780518252602082019150602081019050602083039250611768565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660ff1660f81b8152600101925050506040516020818303038152906040526040518082805190602001908083835b6020831061180257805182526020820191506020810190506020830392506117df565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015611844573d6000803e3d6000fd5b5050506040513d602081101561185957600080fd5b8101908080519060200190929190505050905060008160001c905060006118816002836115ef565b90506118b28282600060077ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f611d77565b156118c7578181965096505050505050611946565b5050508080600101915050611742565b506040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f2076616c696420706f696e742077617320666f756e64000000000000000081525060200191505060405180910390fd5b9250929050565b60008060008061195e8a8a8a611e1b565b91509150600080611970898989611e1b565b915091506000806119a68686868660007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f611e58565b91509150818197509750505050505050965096945050505050565b6000606060fe60026119d38c8c611c3a565b6119dd8b8b611c3a565b6119e78a8a611c3a565b6119f18989611c3a565b604051602001808760ff1660ff1660f81b81526001018660ff1660ff1660f81b815260010185805190602001908083835b60208310611a455780518252602082019150602081019050602083039250611a22565b6001836020036101000a03801982511681845116808217855250505050505090500184805190602001908083835b60208310611a965780518252602082019150602081019050602083039250611a73565b6001836020036101000a03801982511681845116808217855250505050505090500183805190602001908083835b60208310611ae75780518252602082019150602081019050602083039250611ac4565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310611b385780518252602082019150602081019050602083039250611b15565b6001836020036101000a0380198251168184511680821785525050505050509050019650505050505050604051602081830303815290604052905060006002826040518082805190602001908083835b60208310611bab5780518252602082019150602081019050602083039250611b88565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015611bed573d6000803e3d6000fd5b5050506040513d6020811015611c0257600080fd5b810190808051906020019092919050505090506000604051826000820152600081015191505080935050505098975050505050505050565b6060600060028381611c4857fe5b0660020190508084604051602001808360ff1660ff1660f81b81526001018281526020019250505060405160208183030381529060405291505092915050565b600060028660ff161480611c9f575060038660ff16145b611cf4576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806128ec6022913960400191505060405180910390fd5b60008280611cfe57fe5b8380611d0657fe5b858580611d0f57fe5b888a09088480611d1b57fe5b8580611d2357fe5b898a098909089050611d438160046001860181611d3c57fe5b0485611e8c565b905060008060028960ff16840181611d5757fe5b0614611d6557818403611d67565b815b9050809250505095945050505050565b60008560001480611d885750818610155b80611d935750846000145b80611d9e5750818510155b15611dac5760009050611e12565b60008280611db657fe5b868709905060008380611dc557fe5b888580611dce57fe5b8a8b0909905060008614611df4578380611de457fe5b8480611dec57fe5b878a09820890505b60008514611e0a578380611e0457fe5b85820890505b808214925050505b95945050505050565b600080611e4c85858560007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f611fba565b91509150935093915050565b600080600080611e69888887611ff4565b91509150611e7b8a8a84848a8a612010565b935093505050965096945050505050565b600080821415611f04576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4d6f6475","6c7573206973207a65726f000000000000000000000000000000000081525060200191505060405180910390fd5b6000841415611f165760009050611fb3565b6000831415611f285760019050611fb3565b60006001905060007f800000000000000000000000000000000000000000000000000000000000000090505b6000811115611fad57838186161515870a85848509099150836002820486161515870a85848509099150836004820486161515870a85848509099150836008820486161515870a85848509099150601081049050611f54565b81925050505b9392505050565b6000806000806000611fd18a8a8a60018b8b6120ae565b925092509250611fe383838389612153565b945094505050509550959350505050565b60008084838585038161200357fe5b0691509150935093915050565b600080600080905060008090506000809050888b1415612071576000868061203457fe5b898c08141561205257600080819150809050945094505050506120a3565b6120608b8b60018a8a6121ae565b80935081945082955050505061208f565b6120828b8b60018c8c60018c6122cd565b8093508194508295505050505b61209b83838389612153565b945094505050505b965096945050505050565b6000806000808914156120c957878787925092509250612147565b6000899050600080905060008090506000600190505b60008414612139576000600185161461210e576121018383838f8f8f8e6122cd565b8093508194508295505050505b6002848161211857fe5b0493506121288c8c8c8c8c6121ae565b809c50819d50829e505050506120df565b828282965096509650505050505b96509650969350505050565b6000806000612162858561279e565b90506000848061216e57fe5b82830990506000858061217d57fe5b828a0990506000868061218c57fe5b878061219457fe5b8486098a0990508181955095505050505094509492505050565b6000806000808614156121c9578787879250925092506122c2565b600084806121d357fe5b898a099050600085806121e257fe5b898a099050600086806121f157fe5b898a0990506000878061220057fe5b888061220857fe5b848e0960040990506000888061221a57fe5b898061222257fe5b8a8061222a57fe5b8586098c098a8061223757fe5b87600309089050888061224657fe5b898061224e57fe5b8384088a038a8061225b57fe5b838409089450888061226957fe5b898061227157fe5b8a8061227957fe5b8687096008098a038a8061228957fe5b8b8061229157fe5b888d038608840908935088806122a357fe5b89806122ab57fe5b8c8e09600209925084848497509750975050505050505b955095509592505050565b6000806000808a1480156122e15750600089145b156122f457868686925092509250612791565b6000871480156123045750600086145b1561231757898989925092509250612791565b61231f6128c9565b848061232757fe5b898a098160006004811061233757fe5b602002018181525050848061234857fe5b8160006004811061235557fe5b60200201518a098160016004811061236957fe5b602002018181525050848061237a57fe5b8687098160026004811061238a57fe5b602002018181525050848061239b57fe5b816002600481106123a857fe5b60200201518709816003600481106123bc57fe5b602002018181525050604051806080016040528086806123d857fe5b836002600481106123e557fe5b60200201518e09815260200186806123f957fe5b8360036004811061240657fe5b60200201518d098152602001868061241a57fe5b8360006004811061242757fe5b60200201518b098152602001868061243b57fe5b8360016004811061244857fe5b60200201518a0981525090508060026004811061246157fe5b60200201518160006004811061247357fe5b60200201511415806124a757508060036004811061248d57fe5b60200201518160016004811061249f57fe5b602002015114155b612519576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f557365206a6163446f75626c652066756e6374696f6e20696e7374656164000081525060200191505060405180910390fd5b6125216128c9565b858061252957fe5b8260006004811061253657fe5b602002015187038360026004811061254a57fe5b6020020151088160006004811061255d57fe5b602002018181525050858061256e57fe5b8260016004811061257b57fe5b602002015187038360036004811061258f57fe5b602002015108816001600481106125a257fe5b60200201818152505085806125b357fe5b816000600481106125c057fe5b6020020151826000600481106125d257fe5b602002015109816002600481106125e557fe5b60200201818152505085806125f657fe5b8160006004811061260357fe5b60200201518260026004811061261557fe5b6020020151098160036004811061262857fe5b6020020181815250506000868061263b57fe5b8260036004811061264857fe5b60200201518803888061265757fe5b8460016004811061266457fe5b60200201518560016004811061267657fe5b602002015109089050868061268757fe5b878061268f57fe5b888061269757fe5b846002600481106126a457fe5b6020020151866000600481106126b657fe5b602002015109600209880382089050600087806126cf57fe5b88806126d757fe5b838a038a806126e257fe5b866002600481106126ef57fe5b60200201518860006004811061270157fe5b602002015109088460016004811061271557fe5b6020020151099050878061272557fe5b888061272d57fe5b8460036004811061273a57fe5b60200201518660016004811061274c57fe5b6020020151098903820890506000888061276257fe5b898061276a57fe5b8b8f098560006004811061277a57fe5b602002015109905082828297509750975050505050505b9750975097945050505050565b60008083141580156127b05750818314155b80156127bd575060008214155b61282f576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c6964206e756d62657200000000000000000000000000000000000081525060200191505060405180910390fd5b6000809050600060019050600084905060005b600087146128895786828161285357fe5b04905082868061285f57fe5b878061286757fe5b8584098803860880945081955050508687820283038098508193505050612842565b8394505050505092915050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600080191681525090565b604051806080016040528060049060208202803683378082019150509050509056fe496e76616c696420636f6d7072657373656420454320706f696e74207072656669784f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737363616c6c6261636b52616e646f6d6e65737328627974657333322c75696e7432353629a2646970667358221220a2959aedc7c4518c3ec248c4a0983d0cd51928580b8a2487d5fec91f096f489a64736f6c634300060a0033"};

    public static final String SM_BINARY = String.join("", SM_BINARY_ARRAY);

    public static final String FUNC_BYTES32TOBYTES = "bytes32ToBytes";

    public static final String FUNC_CALLBACKS = "callbacks";

    public static final String FUNC_FULFILLRANDOMNESSREQUEST = "fulfillRandomnessRequest";

    public static final String FUNC_GETCHAINIDANDGROUPID = "getChainIdAndGroupId";

    public static final String FUNC_HASHOFKEY = "hashOfKey";

    public static final String FUNC_ISOWNER = "isOwner";

    public static final String FUNC_OWNER = "owner";

    public static final String FUNC_RANDOMNESSREQUEST = "randomnessRequest";

    public static final String FUNC_TRANSFEROWNERSHIP = "transferOwnership";

    public static final Event OWNERSHIPTRANSFERRED_EVENT = new Event("OwnershipTransferred", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}));
    ;

    public static final Event RANDOMNESSREQUEST_EVENT = new Event("RandomnessRequest", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Uint256>() {}));
    ;

    public static final Event RANDOMNESSREQUESTFULFILLED_EVENT = new Event("RandomnessRequestFulfilled", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}, new TypeReference<Uint256>() {}));
    ;

    @Deprecated
    protected VRFCore(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        super(getBinary(), contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    protected VRFCore(String contractAddress, Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) {
        super(getBinary(), contractAddress, web3j, credentials, contractGasProvider);
    }

    @Deprecated
    protected VRFCore(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        super(getBinary(), contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    protected VRFCore(String contractAddress, Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        super(getBinary(), contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public static String getBinary() {
        return (EncryptType.encryptType == EncryptType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public static TransactionDecoder getTransactionDecoder() {
        return transactionDecoder;
    }

    public List<OwnershipTransferredEventResponse> getOwnershipTransferredEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(OWNERSHIPTRANSFERRED_EVENT, transactionReceipt);
        ArrayList<OwnershipTransferredEventResponse> responses = new ArrayList<OwnershipTransferredEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            OwnershipTransferredEventResponse typedResponse = new OwnershipTransferredEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.previousOwner = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.newOwner = (String) eventValues.getIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerOwnershipTransferredEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(OWNERSHIPTRANSFERRED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerOwnershipTransferredEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(OWNERSHIPTRANSFERRED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<RandomnessRequestEventResponse> getRandomnessRequestEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(RANDOMNESSREQUEST_EVENT, transactionReceipt);
        ArrayList<RandomnessRequestEventResponse> responses = new ArrayList<RandomnessRequestEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RandomnessRequestEventResponse typedResponse = new RandomnessRequestEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.coreAddress = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.keyHash = (byte[]) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.seed = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.blockNumber = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.sender = (String) eventValues.getNonIndexedValues().get(4).getValue();
            typedResponse.requestId = (byte[]) eventValues.getNonIndexedValues().get(5).getValue();
            typedResponse.seedAndBlockNum = (byte[]) eventValues.getNonIndexedValues().get(6).getValue();
            typedResponse.consumerSeed = (BigInteger) eventValues.getNonIndexedValues().get(7).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerRandomnessRequestEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(RANDOMNESSREQUEST_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerRandomnessRequestEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(RANDOMNESSREQUEST_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<RandomnessRequestFulfilledEventResponse> getRandomnessRequestFulfilledEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(RANDOMNESSREQUESTFULFILLED_EVENT, transactionReceipt);
        ArrayList<RandomnessRequestFulfilledEventResponse> responses = new ArrayList<RandomnessRequestFulfilledEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RandomnessRequestFulfilledEventResponse typedResponse = new RandomnessRequestFulfilledEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.requestId = (byte[]) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.output = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerRandomnessRequestFulfilledEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(RANDOMNESSREQUESTFULFILLED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerRandomnessRequestFulfilledEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(RANDOMNESSREQUESTFULFILLED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public RemoteCall<byte[]> bytes32ToBytes(byte[] _bytes32) {
        final Function function = new Function(FUNC_BYTES32TOBYTES,
                Arrays.<Type>asList(new Bytes32(_bytes32)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteCall<Tuple2<String, byte[]>> callbacks(byte[] param0) {
        final Function function = new Function(FUNC_CALLBACKS,
                Arrays.<Type>asList(new Bytes32(param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Bytes32>() {}));
        return new RemoteCall<Tuple2<String, byte[]>>(
                new Callable<Tuple2<String, byte[]>>() {
                    @Override
                    public Tuple2<String, byte[]> call() throws Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);
                        return new Tuple2<String, byte[]>(
                                (String) results.get(0).getValue(),
                                (byte[]) results.get(1).getValue());
                    }
                });
    }

    public RemoteCall<TransactionReceipt> fulfillRandomnessRequest(List<BigInteger> _publicKey, byte[] _proof, BigInteger preSeed, BigInteger blockNumber) {
        final Function function = new Function(
                FUNC_FULFILLRANDOMNESSREQUEST,
                Arrays.<Type>asList(new StaticArray2<Uint256>(
                        org.fisco.bcos.web3j.abi.Utils.typeMap(_publicKey, Uint256.class)),
                new DynamicBytes(_proof),
                new Uint256(preSeed),
                new Uint256(blockNumber)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void fulfillRandomnessRequest(List<BigInteger> _publicKey, byte[] _proof, BigInteger preSeed, BigInteger blockNumber, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_FULFILLRANDOMNESSREQUEST,
                Arrays.<Type>asList(new StaticArray2<Uint256>(
                        org.fisco.bcos.web3j.abi.Utils.typeMap(_publicKey, Uint256.class)),
                new DynamicBytes(_proof),
                new Uint256(preSeed),
                new Uint256(blockNumber)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String fulfillRandomnessRequestSeq(List<BigInteger> _publicKey, byte[] _proof, BigInteger preSeed, BigInteger blockNumber) {
        final Function function = new Function(
                FUNC_FULFILLRANDOMNESSREQUEST,
                Arrays.<Type>asList(new StaticArray2<Uint256>(
                        org.fisco.bcos.web3j.abi.Utils.typeMap(_publicKey, Uint256.class)),
                new DynamicBytes(_proof),
                new Uint256(preSeed),
                new Uint256(blockNumber)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple4<List<BigInteger>, byte[], BigInteger, BigInteger> getFulfillRandomnessRequestInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_FULFILLRANDOMNESSREQUEST,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<StaticArray2<Uint256>>() {}, new TypeReference<DynamicBytes>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple4<List<BigInteger>, byte[], BigInteger, BigInteger>(

                convertToNative((List<Uint256>) results.get(0).getValue()),
                (byte[]) results.get(1).getValue(),
                (BigInteger) results.get(2).getValue(),
                (BigInteger) results.get(3).getValue()
                );
    }

    public RemoteCall<Tuple2<BigInteger, BigInteger>> getChainIdAndGroupId() {
        final Function function = new Function(FUNC_GETCHAINIDANDGROUPID,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Int256>() {}));
        return new RemoteCall<Tuple2<BigInteger, BigInteger>>(
                new Callable<Tuple2<BigInteger, BigInteger>>() {
                    @Override
                    public Tuple2<BigInteger, BigInteger> call() throws Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);
                        return new Tuple2<BigInteger, BigInteger>(
                                (BigInteger) results.get(0).getValue(),
                                (BigInteger) results.get(1).getValue());
                    }
                });
    }

    public RemoteCall<TransactionReceipt> hashOfKey(List<BigInteger> _publicKey) {
        final Function function = new Function(
                FUNC_HASHOFKEY,
                Arrays.<Type>asList(new StaticArray2<Uint256>(
                        org.fisco.bcos.web3j.abi.Utils.typeMap(_publicKey, Uint256.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void hashOfKey(List<BigInteger> _publicKey, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_HASHOFKEY,
                Arrays.<Type>asList(new StaticArray2<Uint256>(
                        org.fisco.bcos.web3j.abi.Utils.typeMap(_publicKey, Uint256.class))),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String hashOfKeySeq(List<BigInteger> _publicKey) {
        final Function function = new Function(
                FUNC_HASHOFKEY,
                Arrays.<Type>asList(new StaticArray2<Uint256>(
                        org.fisco.bcos.web3j.abi.Utils.typeMap(_publicKey, Uint256.class))),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple1<List<BigInteger>> getHashOfKeyInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_HASHOFKEY,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<StaticArray2<Uint256>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple1<List<BigInteger>>(

                convertToNative((List<Uint256>) results.get(0).getValue())
                );
    }

    public Tuple1<byte[]> getHashOfKeyOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_HASHOFKEY,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple1<byte[]>(

                (byte[]) results.get(0).getValue()
                );
    }

    public RemoteCall<Boolean> isOwner() {
        final Function function = new Function(FUNC_ISOWNER,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteCall<String> owner() {
        final Function function = new Function(FUNC_OWNER,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> randomnessRequest(byte[] _keyHash, BigInteger _consumerSeed, String _sender) {
        final Function function = new Function(
                FUNC_RANDOMNESSREQUEST,
                Arrays.<Type>asList(new Bytes32(_keyHash),
                new Uint256(_consumerSeed),
                new Address(_sender)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void randomnessRequest(byte[] _keyHash, BigInteger _consumerSeed, String _sender, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_RANDOMNESSREQUEST,
                Arrays.<Type>asList(new Bytes32(_keyHash),
                new Uint256(_consumerSeed),
                new Address(_sender)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String randomnessRequestSeq(byte[] _keyHash, BigInteger _consumerSeed, String _sender) {
        final Function function = new Function(
                FUNC_RANDOMNESSREQUEST,
                Arrays.<Type>asList(new Bytes32(_keyHash),
                new Uint256(_consumerSeed),
                new Address(_sender)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple3<byte[], BigInteger, String> getRandomnessRequestInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_RANDOMNESSREQUEST,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}, new TypeReference<Uint256>() {}, new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple3<byte[], BigInteger, String>(

                (byte[]) results.get(0).getValue(),
                (BigInteger) results.get(1).getValue(),
                (String) results.get(2).getValue()
                );
    }

    public Tuple1<Boolean> getRandomnessRequestOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_RANDOMNESSREQUEST,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public RemoteCall<TransactionReceipt> transferOwnership(String newOwner) {
        final Function function = new Function(
                FUNC_TRANSFEROWNERSHIP,
                Arrays.<Type>asList(new Address(newOwner)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void transferOwnership(String newOwner, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_TRANSFEROWNERSHIP,
                Arrays.<Type>asList(new Address(newOwner)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String transferOwnershipSeq(String newOwner) {
        final Function function = new Function(
                FUNC_TRANSFEROWNERSHIP,
                Arrays.<Type>asList(new Address(newOwner)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple1<String> getTransferOwnershipInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_TRANSFEROWNERSHIP,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    @Deprecated
    public static VRFCore load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new VRFCore(contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    @Deprecated
    public static VRFCore load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new VRFCore(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    public static VRFCore load(String contractAddress, Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) {
        return new VRFCore(contractAddress, web3j, credentials, contractGasProvider);
    }

    public static VRFCore load(String contractAddress, Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        return new VRFCore(contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public static RemoteCall<VRFCore> deploy(Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider, BigInteger _chainId, BigInteger _groupId) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new Int256(_chainId),
                new Int256(_groupId)));
        return deployRemoteCall(VRFCore.class, web3j, credentials, contractGasProvider, getBinary(), encodedConstructor);
    }

    public static RemoteCall<VRFCore> deploy(Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider, BigInteger _chainId, BigInteger _groupId) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new Int256(_chainId),
                new Int256(_groupId)));
        return deployRemoteCall(VRFCore.class, web3j, transactionManager, contractGasProvider, getBinary(), encodedConstructor);
    }

    @Deprecated
    public static RemoteCall<VRFCore> deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit, BigInteger _chainId, BigInteger _groupId) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new Int256(_chainId),
                new Int256(_groupId)));
        return deployRemoteCall(VRFCore.class, web3j, credentials, gasPrice, gasLimit, getBinary(), encodedConstructor);
    }

    @Deprecated
    public static RemoteCall<VRFCore> deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit, BigInteger _chainId, BigInteger _groupId) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new Int256(_chainId),
                new Int256(_groupId)));
        return deployRemoteCall(VRFCore.class, web3j, transactionManager, gasPrice, gasLimit, getBinary(), encodedConstructor);
    }

    public static class OwnershipTransferredEventResponse {
        public Log log;

        public String previousOwner;

        public String newOwner;
    }

    public static class RandomnessRequestEventResponse {
        public Log log;

        public String coreAddress;

        public byte[] keyHash;

        public BigInteger seed;

        public BigInteger blockNumber;

        public String sender;

        public byte[] requestId;

        public byte[] seedAndBlockNum;

        public BigInteger consumerSeed;
    }

    public static class RandomnessRequestFulfilledEventResponse {
        public Log log;

        public byte[] requestId;

        public BigInteger output;
    }
}
